Jump to content
php.lv forumi

Recommended Posts

Posted

Vai kāds šajā forumā beidzot var paskaidrot, kā iedumpēt MySQL 5 tabulā datus ar latviešu rakstuzīmēm, piem., "Uģis", tā lai tie lapā tiktu atainoti pareizi, nevis "U?is".

 

Lasu šo forumu jau vairākas stundas un saprotu ka nevienam tāpat tā īsti tas nav skaidrs, tāpēc šie jautājumi dažādās variācijās atkārtojas.

 

Sūta cits citu uz Googli, izsaka dažādas vairāk vai mazāk pārgudras piezīmes, tomēr lietas patieso būtību tāpat neviens neprot izskaidrot, kaut gan, esmu pārliecināts, ka ir tādi cilvēki kas var normāli izskaidrot to enkodinga sistēmu.

 

Manā gadījumā:

MySQL tabulas lauki ir ar latin1_swedish_ci kodējumu (kā noprotu, tas ir Latvijas noklusētais)

Lapa, kurā jāattēlo informācija ir ar windows-1257 kodējumu.

 

Pateikšu godīgi - es tā īsti līdz galam nesaprotu kas ir Collation un kā ar to pareizi rīkoties. Centos lasīt MySQL manuāli, tomēr nespēju izprast to lietu.

 

Patiesībā vēlos, lai kāds beidzot vienkārši pasāka parastas loģiskas darbības kā veikt dampu, lai viss tiktu attēlots pareizi?

Posted

latin1_swedish_ci cik zinu nav kodējums, bet gan kolācija. Kolācija nosaka kādā veidā tiks kārtoti dati. Piem., utf8_latvian_ci nosaka, ka 'a' nāk pirms 'ā' utt. Vismaz tā to es saprotu.

 

Vairāk uz sitien nevarēšu tev neko pateikt.

Posted

1. mysql connection charsetu pareizu

2. cp1257_general_ci vai cp1257_general_cs izklausās vairāk pēc windows-1257 par kaut kādu latin_zviedru_ci

3. ci/cs ir nav CaSe JūTīGs

Posted
show variables like '%character%';

 

ieraksti pieprasiijumaa un apskaties, kaa tad connections sareguleets

 

Paldies, šito izmēģināšu, varbūt kaut kas noskaidrosies!

Posted

Par to ci/cs sapratu, to izlasīju arī manuālī. Tomēr, ņemot vērā, ka tur rakstīts:

 

A character set is a set of symbols and encodings.

A collation is a set of rules for comparing characters in a character set.

 

Tātad - character set ir kodējums kas nosaka kādi simboli ietilpst katrā konkrētā kodējumā, bet collation ir noteikumu kopums, kas nosaka kā katra noteikta kodējuma simboli tiks kārtoti un kādas darbības ar tiem var tikt veiktas.

 

Character set

Suppose that we have an alphabet with four letters: ‘A’, ‘B’, ‘a’, ‘b’. We give each letter a number: ‘A’ = 0, ‘B’ = 1, ‘a’ = 2, ‘b’ = 3. The letter ‘A’ is a symbol, the number 0 is the encoding for ‘A’, and the combination of all four letters and their encodings is a character set.

 

Collation

Suppose that we want to compare two string values, ‘A’ and ‘B’. The simplest way to do this is to look at the encodings: 0 for ‘A’ and 1 for ‘B’. Because 0 is less than 1, we say ‘A’ is less than ‘B’. What we've just done is apply a collation to our character set. The collation is a set of rules.

 

Tā tālāk seko secinājums:

 

MySQL can do these things:

Store strings using a variety of character sets

Compare strings using a variety of collations

Mix strings with different character sets or collations in the same server, the same database, or even the same table

Allow specification of character set and collation at any level.

 

Tiktālu es saprotu, bet kā to pielietot reālajā dzīvē - tas jāapgūst

Posted (edited)

Cik var ZB jau...

mysql_query("SET NAMES UTF8");

 

1 reizi pie konekcijas VISS !!!!!!!!!!!

Un PO kaads Colac. tev ir uzlikts tabulai ... (protams labaak parveido to uz UTF-8) (kautvai katrai kolonai atseviskji..)

Edit: ko dara collation jau pats saprati...

Starp citu shiis veertiibas glabaajas Failos ;)

nevis Kaa tabulas ;)

Win videe...

Mysql/share/charsets/*.xml

----------------------

Edited by Grey_Wolf
Posted

nav po.

pameegini uzlikt laukam citu codeejumu un tad pieprasiijumu

select * from table where banana like 'āš'

ja banana staav cits kodeejums, mysql -> errors

Posted

Labi, es saprotu, ka var to SET NAMES izmantot, bet kuru tad Charsetu izmantot?

Ja defaultā tabulai collation ir latin1_swedish_ci, tad likumsakarīgi būtu izmantot latin1 charsetu.

Bet kad es tā izdarīju, tad vienalga lapā latv. vārdi bija nepareizi, tikai "U?is" vietā parādījās "UÄ£is" un ne miņas no "Uģis".

Kur tad kļūda?

 

Var jau visu salikt uz utf-8, tas jau būtu ideāli, tomēr es nevaru pārcelt visu lapu uz utf-8 ne vinas dienas, ne nedēlas laikā.

 

Un arī SET NAMES variants ir tikai ielāps, kuru var izmantot, bet tas, domājams, nav īstais risinājums.

Jo pareizi būtu izmantot pareizo charsertu un pareizo collation, bez SET NAMES.

Tā vismaz es domāju.

Posted

apstījies cp1257_general?

neder?

 

kāpēc tu visu laiku domā/stāsti ka latviešu burti būs mysql defaultais čarsets? uzliec visur kur vien vari norādīt vienādu čarsetu (tabula, konekcija, htmls) un rādīsies korekti, kāda starpība tas ir defaultais vai nē, galvenais ka zini ko un kāpēc liki!

Posted
apstījies cp1257_general?

neder?

 

kāpēc tu visu laiku domā/stāsti ka latviešu burti būs mysql defaultais čarsets? uzliec visur kur vien vari norādīt vienādu čarsetu (tabula, konekcija, htmls) un rādīsies korekti, kāda starpība tas ir defaultais vai nē, galvenais ka zini ko un kāpēc liki!

 

Es tikai norādīju, ka manuālī ir teikts, ka cp1257_general ir defaultais priekš Latvijas.

Jā, bet es jau te arī cenšos tā izdarīt kā tu saki

Posted

Nu, es beidzot tiku ar savu problēmu galā ;-)

 

Tas, ko es no visām darbībām sapratu, ka patiesībā MySQL 5 gadījumā jāsāk visu veidot pareizi jau no paša sākuma.

 

Respektīvi, ja saits, jeb html kods ir ar windows-1257 kodējumu, tad datubāze jau pašā sākumā jāveido ar cp1257 charsetu un tabulu collation jābūt ar cp1257_general_ci. Tad nerodas nekādas problēmas un nav arī nepieciešama lieka darbība ar MySQL --> mysql_query("SET NAMES any_charset");, jeb vairākas liekas rindas php kodā.

 

Attiecīgi, ja html ir utf-8, tad charsets datubāzei arī jāliek utf8 un tabulu collation jābūt utf8_general_ci vai utf8_latvian_ci (te man vēl jānoskaidro kura kurā gadījumā jāizmanto). Te arī nevajag to mysql_query("SET NAMES any_charset");.

 

Situācijā, kad tiek izmantots hostingkompānijas MySQL, kā manā gadījumā, defaultā DB charsets ir latin1 un visu jauno tabulu collation automātiski ir latin1_swedish_ci, kas ir latin1 defaultā collation. Te arī rodas neprecizitātes, kad lapas html ir windows-1257, datubāzes un tabulas charset ir latin1 un collation ir latin1_swedish_ci. Šajā gadījumā arī sākas visvisādas rotaļas ar dumpiem un nepieciešams arī visu laiku tas mysql_query("SET NAMES necessary_charset");.

 

Tik tālu nu es esmu ticis ar savien pētījumiem ;-)

Ceru, ka esmu visu sapratis pareizi!

×
×
  • Create New...