maarc93 Posted July 12, 2016 Report Share Posted July 12, 2016 datubāzē ir ieraksti, kur dāņu burti æ ø å tiek rādīti attiecīgi æ ø Ã¥ kā lai izlabo, lai rāda pareizi? Encoding ir UTF-8 un Collation ir utf8_general_ci Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted July 12, 2016 Report Share Posted July 12, 2016 Kas ir tas, kur viņi ir redzami normāli, un kas ir tas, kur viņi ir redzami otrajā variantā? Quote Link to comment Share on other sites More sharing options...
maarc93 Posted July 12, 2016 Author Report Share Posted July 12, 2016 (edited) piemēram, ir ieraksts "Allerød", bet vajadzētu būt "Allerød" Edited July 12, 2016 by maarc93 Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted July 12, 2016 Report Share Posted July 12, 2016 (edited) Nu jā, bet kur tu viņu redzi pareizi un kur- nepareizi? Web lapā? Konsolē? phpMyAdmin? Ja web lapā, tad visticamāk, nav pareizs connection charset. Ja pieslēdzies ar mysql funkcijām, tad jāmeklē, kur pieslēdzies pie DB un tur konfigurācijas parametros jānorāda, ka connection charset ir utf8 (nevis utf-8). sk. mysqli_set_charset(). Edited July 12, 2016 by Mr.Key Quote Link to comment Share on other sites More sharing options...
maarc93 Posted July 12, 2016 Author Report Share Posted July 12, 2016 nepareizi rādās web lapā un datubāzē. Quote Link to comment Share on other sites More sharing options...
kasisppr Posted July 12, 2016 Report Share Posted July 12, 2016 (edited) Nu principā izskatās pēc varianta, kad ne-utf8 encodētas lapas dati ir sagrabāti utf8 encodētā datubāzē. Variantu kā salabot caur MySQL funkcijām es nezinu, ja kāds gudrāks zin priecātos redzēt strādājošu piemēru. Var caur scriptu. No pieredzes varu teikt, ka gan iconv(), mb_convert_encoding() un utf8_encode/utf8_decode īsti nenostrādās. Es izmantoju ko līdzīgu šim skriptam, eju cauri visām tabulas vērtībām un attiecīgi, ja ir izmaiņas, veicu update tabulā. //sagatavojam masīvus $umlaute = array( 'ü'=>'ü', 'ä'=>'ä', 'ö'=>'ö', 'Ö'=>'Ö', 'ß'=>'ß', 'à '=>'à', 'á'=>'á', 'â'=>'â', 'ã'=>'ã', 'ù'=>'ù', 'ú'=>'ú', 'û'=>'û', 'Ù'=>'Ù', 'Ú'=>'Ú', 'Û'=>'Û', 'Ãœ'=>'Ü', 'ò'=>'ò', 'ó'=>'ó', 'ô'=>'ô', 'è'=>'è', 'é'=>'é', 'ê'=>'ê', 'ë'=>'ë', 'À'=>'À', 'Ã'=>'Á', 'Â'=>'Â', 'Ã'=>'Ã', 'Ä'=>'Ä', 'Ã…'=>'Å', 'Ç'=>'Ç', 'È'=>'È', 'É'=>'É', 'Ê'=>'Ê', 'Ë'=>'Ë', 'ÃŒ'=>'Ì', 'Ã'=>'Í', 'ÃŽ'=>'Î', 'Ã'=>'Ï', 'Ñ'=>'Ñ', 'Ã’'=>'Ò', 'Ó'=>'Ó', 'Ô'=>'Ô', 'Õ'=>'Õ', 'Ø'=>'Ø', 'Ã¥'=>'å', 'æ'=>'æ', 'ç'=>'ç', 'ì'=>'ì', 'Ã'=>'í', 'î'=>'î', 'ï'=>'ï', 'ð'=>'ð', 'ñ'=>'ñ', 'õ'=>'õ', 'ø'=>'ø', 'ý'=>'ý', 'ÿ'=>'ÿ', '€'=>'€' ); $find = array_keys($umlaute); $replace = array_values($umlaute); $sql = "SELECT id, value FROM some_table"; $field_set = mysqli_fetch_array($sql); // dzīvē izmantoju ADODB klasi, tāpēc nepārzinu tik labi mysqli foreach($field_set AS $row_set) { $id = $row_set['id']; $value = $row_set['value']; $value_fixed = str_replace($find, $replace, $value); if(strcmp($value, $value_fixed) != 0) { $sql_update = "UPDATE some_table SET value = ".mysqli_escape_string($value_fixed)." WHERE id = ".mysqli_escape_string($id); mysqli_execute($sql_update); //pārrakstām vērtību datubāzē } } Edited July 12, 2016 by kasisppr Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted July 12, 2016 Report Share Posted July 12, 2016 (edited) Ja nepareizi saglabāti pašā datubāzē, tad var konvertēt, mainot kolonnas collation. Precīzi neatceros, bet šajā gadījumā bija jāmaina 2x. Vienreiz no utf8_general_ci uz to swedish, kas defaultais (latin1_swedish_ci vai kaut kā tā), tad atpakaļ uz utf8. Šis vairāk kā pavediens. Dažas DB esmu tādā veidā salabojis. Ja ir vēlme, tad jāpēta sīkāk. Piemēra failu man nav, bet izdarīt to var. Edited July 12, 2016 by Mr.Key Quote Link to comment Share on other sites More sharing options...
Roze Posted July 12, 2016 Report Share Posted July 12, 2016 Ja DB glabāts no php, tad viens no variantiem ir, ka pēc konekcijas ir aizmirsts uzlikt SET NAMES 'utf8' ..php noklusēti (vismaz līdz šim) slēdzās ar 'latin' kodējumu.. Es tāpēc parasti visiem DB serveriem lieku šādu kombināciju: [mysqld] skip-character-set-client-handshake character-set-server=utf8 // vai utf8mb4 ja vajag pilnukas principā ignorē klienta sūtītās opcijas (nav arī jālieto SET NAMES vairs) un vienmēr izmanto UTF8. Jāfiksē ir droši vien noselectējot kā 'latin,' tad konvertējot uz utf8 (ar php vai piem. no komandrindas ar iconv) un liekot atpakaļ jau ar pareizu konekcijas enkodingu. Quote Link to comment Share on other sites More sharing options...
maarc93 Posted July 12, 2016 Author Report Share Posted July 12, 2016 Šī rinda izglāba pasākumu: CONVERT(CAST(CONVERT(column USING latin1) AS BINARY) USING utf8) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.