[英]Utf-8 characters displayed as ISO-8859-1
從插入/讀取數據庫中的utf8內容時遇到問題。 我正在做的所有驗證似乎都指出我的數據庫中的內容應該是utf8編碼的事實,但它似乎是拉丁編碼的。 最初從CLI從PHP腳本導入數據。
Zend Framework Version: 1.10.5
mysql-server-5.0: 5.0.51a-3ubuntu5.7
php5-mysql: 5.2.4-2ubuntu5.10
apache2: 2.2.8-1ubuntu0.16
libapache2-mod-php5: 5.2.4-2ubuntu5.10
-mysql:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_bin |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
-數據庫
created with
CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE SCHEMA `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ;
mysql> status;
--------------
mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2
Connection id: 7
Current database: mydb
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.51a-3ubuntu5.7-log (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 9 min 45 sec
-sql:在進行插入之前我運行了
SET names 'utf8';
-php:在進行插入之前,我使用utf8_encode()和mb_detect_encoding() ,這給了我'UTF-8'。 從db中檢索內容並在將其發送給用戶之前mb_detect_encoding()也提供'UTF-8'
讓我正確顯示內容的唯一方法是將內容類型設置為拉丁語(如果我嗅到流量,我可以看到帶有ISO-8859-1的內容類型標題):
ini_set('default_charset', 'ISO-8859-1');
此測試顯示內容以拉丁語形式出現。 我不明白為什么。 有人有任何想法嗎?
謝謝。
好吧,我發現SET NAMES
並不是那么好。 在文檔中巔峰......
我通常做的是執行4個查詢:
SET CHARACTER SET 'UTF8';
SET character_set_database = 'UTF8';
SET character_set_connection = 'UTF8';
SET character_set_server = 'UTF8';
試一試,看看是否適合你......
哦,請記住,所有UTF-8字符<= 127也是有效的ISO-8859-1字符。 因此,如果流中只有<= 127的字符,則mb_detect_encoding
將落在較高流行率的字符集(默認情況下為“UTF-8”)...
SHOW FULL COLUMNS FROM table;
是什么SHOW FULL COLUMNS FROM table;
節目? 擁有默認字符集的表並不意味着該列。 即,這是有效的: 。
CREATE TABLE test (
`name` varchar(10) character set latin1
) CHARSET=utf8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.