5

私は自分のサイトをphpmysql_*メソッドからphpmysqliに移行しています。

私はその仕事をした次のコードを持っていました:

mysql_query( "SET NAMES'utf8' COLLATE'utf8_unicode_ci'");

このクエリがないと、私の文字列文字(グルジア語)は疑問符で書かれていました。たとえば、それは?????????と書かれていました。გამარჯობა</p>の代わりに

それで、それがその仕事をしたので、私は幸せでした、しかし今、私はmysqliで同じことをすることができません。

$mysqli = new mysqli("localhost", "root", "", "test");
$mysqli->query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'");

誰か助けてくれませんか?ありがとう。

4

4 に答える 4

17

名前を設定するためにmysqliクエリを使用することはお勧めしませんが、mysqli::set_charsetを使用することをお勧めします。

$mysqli = new mysqli("localhost", "root", "", "test");
$mysqli->set_charset("utf8");
于 2012-11-17T19:00:04.183 に答える
1

使用できますmysqli_set_charset

これは、文字セットを変更するための推奨される方法です。mysqli_query()を使用して設定する(SET NAMES utf8など)ことはお勧めしません。

ただし、照合を設定するには、SET NAMESクエリを使用する必要があります。

于 2012-11-17T19:00:31.167 に答える
1

http://php.net/manual/en/mysqli.set-charset.php

また

mysqli->set_charset("utf8")

于 2012-11-17T19:01:09.610 に答える
1

PHP機能のリクエスト/バグレポートが提出されました...

uw@php.netからの応答を集めたhttps://bugs.php.net/bug.php?id=52267を参照してください。

...mysqli_set_charset()文字セットを設定してSET NAMESから、照合を変更するために使用します。

彼/彼女はhttp://dev.mysql.com/doc/refman/5.1/en/mysql-set-character-set.htmlにもリンクしています

この関数は、現在の接続のデフォルトの文字セットを設定するために使用されます。文字列csnameは、有効な文字セット名を指定します。接続照合は、文字セットのデフォルトの照合になります。この関数はSET NAMESステートメントのように機能しますが、の値も設定するためmysql->charset、によって使用される文字セットに影響します。mysql_real_escape_string()

そして、http://dev.mysql.com/doc/refman/5.6/en/charset-collat​​e.htmlにリンクします。これは、クエリに適した照合を使用してクエリを作成する方法を示しています。

COLLATE句を使用すると、比較のためのデフォルトの照合をオーバーライドできます。COLLATEは、SQLステートメントのさまざまな部分で使用できます。ここではいくつかの例を示します。

  • ORDER BY
    SELECT k FROM t1 ORDER BY k COLLATE latin1_german2_ci;

  • AS
    SELECT k COLLATE latin1_german2_ci AS k1 FROM t1 ORDER BY k1;

  • GROUP BY
    SELECT k FROM t1 GROUP BY k COLLATE latin1_german2_ci;

  • 集計関数の場合:
    SELECT MAX(k COLLATE latin1_german2_ci) FROM t1;

  • DISTINCT
    SELECT DISTINCT k COLLATE latin1_german2_ci FROM t1;

  • WHERE
    SELECT * FROM t1 WHERE _latin1 'Müller' COLLATE latin1_german2_ci = k; SELECT * FROM t1 WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci;

  • HAVING
    SELECT k FROM t1 GROUP BY k HAVING k = _latin1 'Müller' COLLATE latin1_german2_ci;

于 2013-01-12T07:06:34.387 に答える