2011-11-29 63 views
6


有人能告訴我如何強制Doctrine創建數據庫表UTF-8編碼和utf8_polish_ci?我的教訓配置文件有這個數據庫配置參數:學說2.1和表utf-8編碼

$conn = array(
    'driver' => 'pdo_mysql', 
    'dbname' => 'test', 
    'user' => 'root', 
    'password' => '*****', 
    'charset' => 'utf8', 
    'driverOptions' => array(1002=>'SET NAMES utf8')); 

儘管如此,它仍然使用默認編碼創建表:latin1latin1_swedish_ci

+0

爲什麼你使用原則創建* *表格在第一位?這不是你在使用任何數據庫管理工具時所做的事情嗎? –

+7

@Pekka - 讓Doctrine2爲你管理你的DDL語句是在Doctrine2中做事的首選方式。 orm:schema-tool:[create | update]是命令行工具的相關命令。 – timdev

回答

7

您將其設置在數據庫中,doctrine僅使用數據庫的默認值。從Doctrine 2.1 FAQ:得知這個問題

4.1.1。我如何設置MySQL表格的字符集和排序規則?

您不能在註釋,yml或xml映射文件中設置這些值。要使數據庫使用默認字符集和歸類,您應該將MySQL配置爲默認字符集,或使用字符集和歸類細節創建數據庫。這樣他們就會繼承到所有新創建的數據庫表和列。

+0

我可以在哪裏設置我的數據庫的默認值? –

3

當您創建數據庫時,你應該這樣創建:

CREATE DATABASE `your_table_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci;

,讓您創建的表繼承字符集和校對值

+0

感謝這:) –

4

使用下面的代碼來設置學說歸類,字符集和引擎:

/** 
* @ORM\Table(name="temporary", options={"collate"="utf16_latin_ci", "charset"="utf16", "engine"="MyISAM"}) 
* @ORM\Entity 
*/