OK, ich bin derzeit in PHP/MySQL/UTF-8/Unicode-Hölle!UTF8 gibt PHP -> MySQL aus. Fragezeichen in der Datenbank bekommen?
Meine Umgebung: MySQL: 5.1.53 Server characterset: latin1 Db characterset: latin1 characterset. Kunde: latin1 Conn characterset: latin1
PHP: 5.3.3
Meine PHP-Dateien werden als UTF-8-Format, nicht als ASCII-Dateien gespeichert.
In meinem PHP-Code, wenn ich die Datenbankverbindung ich folgendes tun machen:
ini_set('default_charset', 'utf-8');
$my_db = mysql_connect(DEV_DB, DEV_USER, DEV_PASS);
mysql_select_db(MY_DB);
// I have tried both of the following utf8 connection functions
// mysql_query("SET NAMES 'utf8'", $my_db);
mysql_set_charset('utf8', $my_db);
// Detect if form value is not UTF-8
if (mb_detect_encoding($_POST['lang_desc']) == 'UTF-8') {
$lang_description = $_POST['lang_desc'];
} else {
$lang_description = utf8_encode($_POST['lang_desc']);
}
$language_sql = sprintf(
'INSERT INTO app_languages (language_id, app_id, description) VALUES (%d, %d, "%s")',
intval($lang_data['lang_id']),
intval($new_app_id),
mysql_real_escape_string($lang_description, $my_db)
);
Das Format/erstellen meiner MySQL-Datenbank ist:
CREATE TABLE IF NOT
app_languages
VORHANDEN (language_id
int (10) vorzeichenlos NOT NULL,app_id
int (10) unsigniert NOT NULL,description
tinytext sortieren utf8_unicode_ci, PRIMÄR Schlüssel (language_id
,app_id
) ) ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;
die SQL-Anweisungen, die von meinem PHP-Code erzeugt werden wie folgt aussehen:
INSERT INTO app_languages (language_id, app_id, description) VALUES (91, 2055, "阿拉伯体育新闻和信息")
INSERT INTO app_languages (language_id, app_id, description) VALUES (26, 2055, "阿拉伯體育新聞和信息")
INSERT INTO app_languages (language_id, app_id, description) VALUES (56, 2055, "בערבית ספורט חדשות ומידע")
INSERT INTO app_languages (language_id, app_id, description) VALUES (69, 2055, "アラビア語のスポーツニュースと情報")
Dennoch erscheint die Ausgabe in meiner Datenbank wie folgt aus:
| 69 | 2055 | ????????????????? |
| 56 | 2055 | ?????? ????? ????? ????? |
| 28 | 2055 | Arapski sportske vijesti i informacije |
| 42 | 2055 | Arabe des nouvelles sportives et d\'information |
| 91 | 2055 | ?????????? |
Was ich tue, falsch ??
P.S. Wir können Putty zu SSH direkt auf den Datenbankserver und über die Befehlszeile Einfügen einer der unicode/mehrsprachigen insert-Anweisungen verwenden. Und sie arbeiten erfolgreich !?
Danke für jedes Licht, das du auf dieses Licht werfen kannst, es macht mich verrückt.
Prost, Jason
Nein, das ist nicht korrekt, weil Sie in meinen Kommentaren sehen werden "PS Wir können Putty zu SSH direkt auf den Datenbankserver und über die Befehlszeile Einfügen einer der unicode/mehrsprachigen Insert-Anweisungen. Und sie funktionieren erfolgreich !? " – Jason
@Jason Sind Sie sicher, dass der Putty die richtige Kodierung verwendet? http://thegreyblog.blogspot.com/2009/08/configuring-putty-to-use-utf-8.html – bobo
@bobo, ja das ist genau, wie Putty Codierung behandelt, ist es UTF-8. – Jason