このセクションでは,最新バ,ジョンのMySQLの既知の問題を一覧表示します。
プラットフォム固有の問題にいては,セクション2.1 "一般的な▪▪ンスト▪▪ルガ▪▪ド"およびセクション24.4“MySQLのデバッグおよび移植”の▪▪ンスト▪▪ルおよび移植の手順を参照してください。
次の問題は既知の問題です。
在
のサブクエリ,の最適化は,=
ほど効果はありません。lower_case_table_names = 2
(データベース名およびテーブル名に大文字/小文字のどちらが使用されたかをMySQLが認識するようになります)を使用していても,MySQLが関数数据库()
のデータベース名,またはさまざまなログ内(大文字/小文字が区別されないシステムの)で使用された表記を識別できません。スレ,ブで制約に別の名前がある可能性があるため,
外键
制約のドロップがレプリケ,ションで動作しません。取代
(および)取代
オプションを指定した加载数据
)で删除级联
がトリガ,されません。截然不同的
リストに指定されたすべてのカラムのみを使用しない場合,GROUP_CONCAT ()
内で命令
を指定した截然不同的
が動作しません。大きい整数値(2)63から264−1まで)を10進数カラムまたは文字列カラムに挿入する場合,数値は符号付き整数のコンテキストで評価されるため,負の値として挿入されます。
分析表
、优化表
,および修理表
が,插入延迟
を使用している非トランザクションテ,ブルで問題となることがあります。ステートメントベースのバイナリロギングでは,マスターは実行されたクエリーをバイナリログに書き込みます。これは,ほとんどの場合に理想的に動作する非常に高速かコンパクトで効率的なロギング方法です。ただし,データの変更が非決定的であるようにクエリーが設計されている(通常,レプリケーション以外でも推奨されるやり方ではありません)場合,マスターおよびスレーブのデータで相違が発生する可能性があります。
例:
ゼロ値または
零
値をAUTO_INCREMENT
カラムに挿入する创建表…选择
ステ,トメントまたは插入……选择
ステ,トメント。删除级联
プロパティが指定された外部キを持テブルから行を削除する場合の删除
。挿入されるデ,タに重複キ,値がある場合の
取代……选择
、插入ignore…选择
。
これは,前述したクエリ,に決定性順序を保証する
命令
句がない場合にのみ発生することがあります。たとえば,
命令
が指定されていない插入……选择
の場合,マスタ,およびスレ,ブでのオプティマ,选择
が異なる順序で行を返すことがあります(それにより,行が異なるランクを持)ことになり,AUTO_INCREMENT
カラムで異なる数値が取得されます)。次の場合にのみ,マスタ,とスレ,ブでクエリ,の最適化が異なる結果となります。
マスタ,とスレ,ブで,テ,ブルが異なるストレ,ジエンジンを使用して格納される。(マスタ,とスレ,ブで異なるストレ,ジエンジンを使用できます。たとえば,マスタ,では
InnoDB
を使用するが,スレ,ブの使用可能なディスク領域が少ない場合は,スレ,ブでMyISAM
を使用できます。)MySQLのバッファサズ(
key_buffer_size
など)がマスタ,とスレ,ブで異なる。マスターとスレーブで異なるバージョンのMySQLを実行していて,オプティマイザのコードがそれらのバージョンで異なる。
この問題は,mysqlbinlog | mysqlを使用したデ,タベ,スのリストアに影響することもあります。
この問題を回避するもっとも簡単な方法は,行が常に同じ順序で格納または変更されるように,
命令
句を前述の非決定性クエリ,に追加することです。行ベ,スのロギング形式または混合したロギング形式を使用することでも,この問題が回避されます。スタートアップオプションにファイル名を指定しない場合,ログファイル名はサーバーのホスト名に基づいています。ホスト名を別の名前に変更した場合に同じログファ电子邮箱ル名のままにするには,
——log-bin =
などのオプションを明示的に使用する必要があります。セクション5.1.3 "サ,バ,コマンドオプション"を参照してください。または,ホスト名の変更が反映されるように,古いファイルを名前変更します。バイナリログの場合は,バイナリログのインデックスファイルを編集して,そこにあるバイナリログファイル名も修正する必要があります。(スレーブサーバーのリレーログも同様です)。old_host_name
本加载数据文件
ステトメントのあとに残っている一時ファルが,mysqlbinlogによって削除されません。セクション4.6.8 "mysqlbinlog-バナリログファルを処理するためのユティリティ”を参照してください。重命名
が临时
テ,ブル,または合并
テ,ブルで使用されているテ,ブルで動作しません。字符集
を使用したときに,デ,タベ,ス,テ,ブル,およびカラムの名前に変換された文字を使用できません。喜欢……逃避
の逃避
で,「_
」または「%
」を使用できません。デ,タ値を比較するときに,最初の
max_sort_length
バ@ @トのみが使用されます。これは,最初のmax_sort_length
バ电子邮箱トで値が有意に識別されない場合,集团
、命令
,または截然不同的
で値を信頼して使用できないことを意味します。これを回避するには,変数値を増やします。max_sort_length
のデフォルト値は1024であり,サ,バ,の起動時または実行時に変更できます。数値計算は
长整型数字
または双
(通常,どらも長さは64ビットです)で行われます。返される精度は関数によって異なります。一般的なル,ルとしては,ビット関数は长整型数字
の精度,如果()
と英语教学()
は长整型数字
または双
の精度,および残りは双
の精度で実行されます。符号なしの长长的値がビットフィールド以外で63ビット(9223372036854775807)を超える値に解決される場合は,使用しないようにしてください。1
枚举
カラムおよび集
カラムを作成できます。現在、
MIN ()
、MAX ()
,およびその他の集約関数では,MySQLはセット内の文字列の相対位置ではなく文字列値で枚举
カラムおよび集
カラムを比較します。更新
ステ,トメントでは,カラムは左から右に更新されます。更新されたカラムを参照している場合は,元の値ではなく更新された値が取得されます。たとえば,次のステ,トメントでは关键
に1
ではなく2
が@ @ンクリメントされます。mysql >更新tbl_name设置键=键+ 1,键=键+ 1;
同じクエリーで複数の一時テーブルを参照することはできますが,特定の一時テーブルを複数回参照することはできません。たとえば,次のステ,トメントは動作しません。
mysql> SELECT * FROM temp_table, temp_table AS t2;错误1137:不能重新打开表:'temp_table'
結合で「隠し」カラムを使用している場合は,オプティマ
截然不同的
の処理が異なることがあります。結合では、隠しカラムは結果の一部としてカウントされますが (表示されていなくても)、通常のクエリーでは、隠しカラムは截然不同的
比較で考慮されません。次に例を示します。
SELECT DISTINCT mp3id FROM band_10bet手机中文版downloads WHERE userid = 9;
および
选择不同的band_downloads。10bet手机中文版mp3id FROM band_10bet手机中文版downloads,band_mp3 WHERE band_downloads。userid = 9 AND band_mp3。Id = band_10bet手机中文版downloads。mp3id ORDER BY band_10bet手机中文版downloads。id DESC;
2番目の例では,MySQL Server 3.23。Xを使用すると,結果セットに2の同じ行が取得されることがあります(隠しカラム. exe
id
の値が異なる可能性があるためです)。これは,結果に
命令
のカラムがないクエリ,でのみ発生します。空のセットを返すクエリ,に関する
过程
を実行すると,过程
でカラムが変換されないことがあります。合并
タプのテブルの作成で,基礎テブルが互換性のあるタプであるかどうかがチェックされません。ALTER TABLE
を使用して,合并
テ,ブルで使用されるテ,ブルに独特的
@ @ンデックスを追加し,@ @次に合并
テブルに通常のンデックスを追加したときに,テブルに古い独特的
ではないキ,があった場合,それらのテ,ブルのキ,順序は異なります。これは,重複キ,をできるだけ早く検出できるように,ALTER TABLE
が通常の@ @ンデックスより独特的
ンデックスを優先するためです。