Veritabanı sorguları ile karakter kodlaması tutmak için nasıl

3 Cevap php

Ben aşağıdakileri yapıyorum.

1) I am exporting a database and saving it to a file called dump.sql. 2) The file is then transferred to a different server via PHP ftp. 3) When the file has been successfully transferred the administrator has an option to run a 'dbtransfer' script on the new host. 4) This script blows up the script and runs the queries line by line.

Bu harika çalışıyor - ancak yabancı dil kodlaması ile ilgili bir sorun var. Biz UTF-8 kullanıyor.

Step 1 : This works fine, file is in UTF-8 Format. Step 3 : When I test the contents of the dump.sql file using mb_check_encoding(). The string comes back as UTF-8. Step 4 : This creates tables with utf8_general_ci encoding. The information is dumped in.

'§ Ã, ‡ Ã, Ã ¶ Ã-Ã ¼, AoE, Ä ±, Ä °, ÅŸ, AZ, AY, AZ': Ben tabloyu kontrol ettiğimde transferinden sonra ben böyle kayıtlarını olsun. Ben veritabanına gittiğinde bir UTF-8 dizesi onun kodlama kaybetmek nasıl anlamıyorum. Ben bir adım eksik muyum? Ben dize UTF-8 olarak ayrıştırılır sağlamak için fonksiyon çeşit çalıştırmak gerekiyor?

Sistem kurulduğunda ben yabancı dil sorguları kaydedebilirsiniz. Bu kadar karıştırmasını sadece transferidir.

Herhangi bir fikir?

3 Cevap

Onun tüm bu adımları yapıyor ama bir vuruş vermek sağlar nasıl belli değil.

Öncelikle, karakter setleri ile ilgili tüm veritabanı bağlantı ayarlarını utf-8 için ayarlanmış olduğundan emin olun. Bazı veritabanı tarafında vardır ve istemci tarafında bazı vardır.

İkincisi, herhangi bir veri takmadan önce sorguyu aşağıdakileri yapın:

SET NAMES 'utf8';

PHP bir DB bağlandıktan sonra hep bağlantı UTF-8 kullanıyor emin olmak için bağlantı nesnesi üzerinde aşağıdaki sorguyu çalıştırın:

$pdo->exec('SET NAMES \'utf8\' COLLATE \'utf8_unicode_ci\'');

Başka bir seçenek de, hedef tablo UTF-8 olmasıdır.

Büyük olasılıkla, sen onunla UTF-8 konuşuyorduk ki MySQL söylemedin - bağlantı yanlış karakter kümesi vardı. Bunun için mysql_set_charset işlevini kullanın.

Ayrıca utf8_general_ci bir kodlama olmadığını unutmayın - bu bir harmanlama. Diğer bir deyişle, sadece (sıralarken dahil) değerlerini karşılaştırırken bu sütun nasıl davranılması gerektiğini MySQL söyler.