manual明確指出「ucs2不能用作客戶端字符集,這意味着它不適用於SET NAMES或SET CHARACTER SET」。那麼我怎樣才能插入,例如,代碼點U + 2193?我正在使用PHP 5.3 + PDO。如何在PHP中使用PHP PDO插入UCS-2數據?
回答
如果你想使用Unicode與MySQL服務器通信,你唯一的選擇是使用UTF-8。
如果您現在正在使用PHP中的UCS-2或UTF-16字符串,則在嘗試存儲它們之前,必須將它們轉換爲UTF-8。另外請注意,如果您將客戶端字符集設置爲MySQL,則MySQL將返回UTF-8,因此如果您承諾在PHP端使用UCS-2,則還需要轉換查詢結果。 (如果你有能力做出更大的改變,那麼在使用UTF-8的任何地方都可能比做所有這些額外的轉換更好。)
至於存儲代碼點U + 2193,不用擔心: UTF-8可以表示每個Unicode碼點(在這個特定情況下,它將是0xE2 0x86 0x93
)。
從技術上講,這是捏造了一點,因爲MySQL的utf8
和ucs2
字符集只包括Unicode的一個子集稱爲基本多文種平面(BMP)。 Unicode字符集的世界是expanded in MySQL 5.5超出BMP的範圍,但仍不能使用ucs2
,新的utf16
或utf32
字符集作爲客戶端字符集,使您仍然堅持使用UTF-8。
好吧,好吧,但爲什麼MySQL有一個ucs2字符集(和排序規則),如果你不能使用它們? – chx
如果您有合理的理由(可能是大塊的CJK?),您可以將數據存儲在這些編碼中。你不能讓數據庫服務器和客戶端相互交談。只要雙方達成一致,並且它涵蓋了應用程序需要的所有字符(UTF總是會這樣),那麼對客戶端 - 服務器鏈接使用何種編碼應該不重要。 – bobince
UTF-16在許多\ * ix世界中都是二等公民,包括MySQL和PHP。你確定*你真的在PHP中使用UTF-16/UCS-2數據嗎?它提供了很少的工具來處理這種編碼中的字節字符串。你更可能使用更合理的編碼UTF-8。 – bobince
後代,CREATE TABLE test (encoding varchar(255) CHARACTER SET ucs2);
然後INSERT INTO test VALUES (1, CHAR(0x2193));
。如果我運行SELECT * FROM test
,我會看到一個向下箭頭。
請注意,除非您將'character_set_results'設置爲binary或ucs2,否則MySQL將自動將您的結果轉換爲另一種編碼,即使它們存儲爲UCS-2。 –
- 1. 使用pdo/php插入數據表
- 2. 插入數據 - PHP PDO
- 3. PHP PDO插入數據
- 4. 使用PDO的PHP插入
- 5. 使用PDO插入php
- 6. 在oracle中使用php插入blob pdo
- 7. 使用php pdo在數據庫中插入記錄
- 8. 使用PHP的PDO插入HSTORE數組
- 9. pdo,將php對象插入數據庫
- 10. PHP PDO插入多選擇數據
- 11. 傾斜插入件插入用PHP插入數據的基礎上使用PDO
- 12. PHP PDO Firebird插入
- 13. 用PDO php在mysql中插入&符號(&)?
- 14. 用PHP PDO插入多行
- 15. php pdo插入循環中
- 16. 如何使用php在數據庫中插入數據
- 17. 使用PHP在MongoDB中插入數據
- 18. 在mysql中使用php插入數據
- 19. 使用PHP插入和檢索數組數據到MySQL pdo
- 20. 使用循環插入PHP PDO
- 21. 無法插入數據庫使用php與PDO :: execute()
- 22. 使用PDO爲PHP插入數據到MySQL Xcode
- 23. 如何執行PHP PDO插入
- 24. 不能使用php的PDO將數據插入到數據庫中
- 25. PDO數據庫中插入
- 26. PHP PDO插入問題
- 27. PHP PDO默默不插入
- 28. php pdo多行插入
- 29. PHP PDO插入方法
- 30. PHP PDO插入錯誤
你可能會逃避使用UTF-16。大多數代碼點是相同的。 –
如何使用UTF-8呢? – Svish