Jump to content
php.lv forumi

Kā tad īsti jābūt?


optimus

Recommended Posts

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?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

×
×
  • Create New...