簡體   English   中英

Utf-8字符顯示為ISO-8859-1

[英]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

Vertifications:

-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”)...

  1. 檢索之前你在做什么? 也是'SET NAMES utf8;'? 否則,MySQL將靜默轉換為連接指示使用的字符集。
  2. 如果不是那樣, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM