1

私はlaravelを学んでいて、単純なプロセスにこだわっています。テーブルを UTF-8 として生成したいのですが、varchar とテキスト フィールドは latin-1 のようです。

ガイドのスキーマ セクションはまったく役に立ちませんでした。この GitHub エントリを見つけまし たが、どちらも機能しません (エラーが発生します)。

次のようなスキーマがあります。

<?php

class Create_Authors_Table {

    /**
     * Make changes to the database.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('authors',function($table){
         //$table->charset('utf8'); //does not work
         //$table->collate('utf8_general_ci'); //does not work

         $table->increments('id');
         $table->string('name')->charset('utf8'); //adding ->collate('utf8_general_ci') does not work
         $table->text('bio')->charset('utf8');
         $table->timestamps();
        });
    }

    /**
     * Revert the changes to the database.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('authors');
    }

}

これは SQL 出力です。

CREATE TABLE IF NOT EXISTS `authors` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `bio` text NOT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

しかし、これは私が必要なものです:

CREATE TABLE IF NOT EXISTS `authors` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `bio` text NOT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

collationapplication/config/database.phpにもキーを入れました

'mysql' => array(
    'driver'   => 'mysql',
    'host'     => '',
    'database' => '',
    'username' => '',
    'password' => '',
    'charset'  => 'utf8',
    'collation'=> 'utf8_unicode_ci', //this line was not there out of the box, googling provided me this
    'prefix'   => '',
),

何が欠けていますか、どうすれば修正できますか?

ありがとう、

4

5 に答える 5

1

Linux Mint 13 Mate(Ubuntu 12.04 LTSに基づく)で(mysql 5.5(5.5.29)を使用して)解決しました

これらの行を /etc/mysqld/my.cnf に追加しました

[client]
default-character-set = utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci

このように、SQL クエリはシェルでは正常に機能しましたが、laravel や phpmyadmin などでは機能しませんでした。だから私はこれをしました:

/etc/apache2/conf.d/charset を開き、; を削除しました。この行から:

AddDefaultCharset UTF-8

次に、apache2 と mysql を再起動したところ、正常に動作するようになりました。

後で編集:その GitHub Core Hackはごちそうのように機能します。私はそれをやった。

于 2013-03-06T15:03:01.770 に答える
1

Laravel 3 マスターの個々のスキーマ ビルドに対して実際には実装されていないようです。(ソースコードには何も見つかりません)

これを手動で行う必要があると思います(生のクエリで試してください)

于 2013-01-29T15:26:34.403 に答える
1

私は同じことで立ち往生しています.Laravelには文字セットの照合を変更/設定する方法はないと思います. my.ini/my.cnfただし、MySQL サーバーの文字セットのデフォルトの照合を変更できます。

[mysqld]
#...
collation-server = utf8_unicode_ci
#...
于 2013-03-05T14:24:16.317 に答える
0

ここに私の解決策があります

1. laravel public $charset;/database/schema/table.php の下にpublic $engine; 追加します 2. laravel/database/schema/grammars/mysql.php の create 関数を次のように置き換えます

public function create(Table $table, Fluent $command)
{
    $columns = implode(', ', $this->columns($table));

    // First we will generate the base table creation statement. Other than auto
    // incrementing keys, no indexes will be created during the first creation
    // of the table as they're added in separate commands.
    $sql = 'CREATE TABLE '.$this->wrap($table).' ('.$columns.')';

    if ( ! is_null($table->engine))
    {
        $sql .= ' ENGINE = '.$table->engine;
    }
    if ( ! is_null($table->charset))
    {
        $sql.="DEFAULT CHARSET=".$table->charset;
    }
    return $sql;
}

3.これで、次のような移行phpで任意の文字セットを設定できます$table->charset='utf8';

于 2013-08-18T07:12:52.837 に答える