このような状況は起こるべきではありませんが、リレーショナルデータベースのように、通常は事前に設計する必要があり、後から変更することはできませんが、以前の作業での過失により、正直に言うと、これは私の個人的な過失だけではありませんもちろん、データベースを設計したのは主に私なので、今でも自分自身を批判しています。
状況について話させてください: MySQLフィールドに設定されている varchar 値フィールドが短すぎます。30 が設定されています (varchar が拡張可能であることは漠然と覚えていますが、もちろん、現実は私の曖昧さを許容しません)。データベースのデータを変更せずに、varchar フィールドの長さを動的に変更する方法を探していただけです。しばらく探した後、ついにそれを見つけました。
alter table 表名 modify column 字段名 varchar(数量);
この機能は非常に強力ですが、設計時にはこの種の問題を回避することが最善であることを皆さんに思い出させます。
追記: mysqlでvarcharの長さを設定する問題
特定の項目がvarchar(50)に設定されている場合
、もちろん英語の場合は50です
中国語
utf-8中国語アカウントはどうですか
3 バイトの場合
それでは、この varchar(50) は 16 文字の中国語のみを保存できますか?
mysql varchar(50) は、中国語でも英語でも 50 文字を保存できます MySQL5 ドキュメントには、varchar フィールド タイプが含まれています 次のように記述されます。 varchar(m) 可変長文字列。 M は最大列長を表します。 M の範囲は 0 ~ 65,535 です。 (VARCHAR の実際の最大長は、最も長い行のサイズと使用される
文字セット
によって決まります。有効な最大長は 65,532 バイトです)。
なぜこのように変化するのでしょうか? MySQL マニュアルは不親切すぎると本当に感じます。なぜなら、MySQL 5.1 は標準 SQL 仕様に準拠しており、VARCHAR 値の末尾のスペースを削除しません。という説明を見つけるには注意深く読まなければならないからです。 VARCHAR は、1 バイトまたは 2 バイトの長さのプレフィックス + データとともに保存されます。 VARCHAR 列の宣言された長さが 255 より大きい場合、長さのプレフィックスは 2 バイトになります。
はい、少し理解できたみたいです。しかし、具体的には、長さが 255 を超える場合、2 バイトの長さの接頭辞が使用されると述べました: 65535 - 2 = 65533。これらの専門家がどのように計算したのか分かりませんが、今のところ疑問は保留しておきます。
注: UTF8 エンコーディングを使用してテストしましたが、varchar の最大長は 21854 バイトです。
mysql バージョン 5.0.45 およびデータベース エンコーディング utf8 でテスト: varchar の最長定義は 21785 です。つまり、文字、数字、漢字を問わず、21,785 個しか配置できません。
推測: varchar の最大バイト数は 65535 で、utf8 は 1 文字を 3 バイト 65535/3=21785 でエンコードします。
以上がMySQL の varchar の長さを動的に変更する方法を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。