2016-04-19 42 views
0

我的架構設置爲Latin1默認排序規則。MySQL程序更改字符集

我的PHP代碼:

$result = $conn->sql('CALL _TESTE("á é ô ã ç")'); 

我_TESTE程序

CREATE DEFINER=`root`@`%` PROCEDURE `_TESTE`(IN vTarNom VARCHAR(255)) 
BEGIN 
    INSERT INTO _TEMP VALUES (NULL, vTarNom); 
END 

什麼是beeing插入:

áéÃA'£Â§

我w螞蟻保存我發送的內容:áéôç

任何幫助嗎?

編輯:如果我從發送「áéôçç」的工作臺調用該過程,它會正確插入,只是在被PHP調用時纔會進行轉換。

+1

我強烈建議切換到[utf8mb4](https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html)進行整理。它肯定會支持你的字符 – Machavity

+0

'SHOW CREATE PROCEDURE _TESTE \ G' - 你可能會發現這個過程使用了latin1。 –

+0

該過程是latin1。我認爲問題不在於過程,表或模式,因爲如果我在工作臺內調用過程,它會正確插入latin1字符。 –

回答

1

您將UTF-8插入Latin1數據庫。這裏的快速解決方案是將您的UTF-8字符串轉換爲Latin1,但最好的方案是使您的數據庫爲UTF-8。

對於大多數語言,Latin1可能沒問題,但它無法處理人們經常使用的其他符號。

+1

相關http://stackoverflow.com/questions/2708958/differences-between-utf8-and-latin1 – Machavity

+0

@tadman,我是從PHP發送拉丁文字符'áéôç',但不知何故,它是到達UTF8在程序中。如果我從工作臺直接調用過程(例如),傳遞'áéôãç',它會完美插入。 –

+1

你必須通過整個過程保持相同的字符集。 code-> db connection-> table->字段。如果任何階段具有不同的字符集,則會損壞文本 - 要麼始終使用相同的字符集,要麼在「邊框」處具有適當的字符集轉換邏輯。 –