[英]Special characters are stored as ? in my mysql DB
我使用以下代碼在我的數據庫中存儲和更新數據。
<?php
header("Content-Type: text/html;charset=UTF-8", true);
mysql_connect("localhost", "test", "test") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
// mysql_set_charset('UTF8');
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");
mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;")
or die(mysql_error());
該代碼運行良好。 但是,如果字符串(例如“ city”)包含ä,ö,ü,則會將其存儲為? 例如,單詞“Bär”轉到“ B?r”。
我已經添加了這些utf8內容,但無濟於事。 服務器僅支持php4.x
編輯:數據庫正在使用latin1_general_ci作為排序規則。
使用utf8作為排序規則,可能是utf8_bin
或utf8_unicode_ci
(ci表示不區分大小寫,因此“ John” =“ JOHN”之類的比較將返回true)。 您可以通過在MySQL中運行以下查詢來執行此操作:
alter table `test`.`english` convert to character set utf8 collate utf8_unicode_ci;
將表排序utf8_bin
更改為utf8_bin
。
要更改表的默認字符集和排序規則,包括現有列的字符集和排序規則(請注意convert to子句):
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin
在utf8_general_ci
ä = a
ö = o
ü = u
但在utf8_bin
ä != a
ö != o
ü != u
保留ut8_unicode_ci並將其添加到您的php代碼中:
mb_language('uni');
mb_internal_encoding('UTF-8');
mysql_query("set names 'utf8'",$connection);
我在各處(西里爾文,中文等)都在使用它,並且它適用於每個查詢(插入或更新)。
<?php
header("Content-Type: text/html;charset=UTF-8", true);
$connection = mysql_connect("localhost", "test", "test") or die(mysql_error());
mb_language('uni');
mb_internal_encoding('UTF-8');
mysql_query("set names 'utf8'",$connection);
mysql_select_db("test") or die(mysql_error());
mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;")
or die(mysql_error());
我知道了 我對此行為沒有任何解釋。 我已經將php文件從utf8更改為latin1:
mysql_query("SET NAMES 'latin1'");
mysql_query("SET CHARACTER SET latin1");
mysql_query("SET COLLATION_CONNECTION = 'latin1_general_ci'");
在MySQL DB中,表和列的排序規則是utf8_unicode_ci。
現在,它適用於€符號旁邊的所有字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.