検索

mysqlのcharとvarcharの違い

Sep 07, 2017 pm 01:12 PM
charmysqlvarchar

mysql チュートリアルでは、char と varchar の違いは、どちらも文字列の格納に使用されることですが、char は固定長であるのに対し、varchar は可変長の文字型であるという点で、その格納方法が異なります。

char と varchar の違い

char (13) 'www.jb51.net' などの固定長には 12 文字の記憶域が必要です

varchar(13) 'www.jb51.net' などの可変長' には 13 文字のストレージスペースが必要です。

上記からわかるように、char の長さは固定されており、どれだけ多くのデータを保存しても、常に固定長になります。 Varchar は可変長ですが、位置を格納するために使用される全長に 1 文字を追加する必要があります。したがって、実際のアプリケーションでは、ユーザーは独自のデータ型に従ってそれを行うことができます。

char と varchar の速度の違いを見てみましょう。

コードは次のとおりです:

mysal>create tabe ab(v varchar(4),c char(4)); 
query ok ,0 rows affected(0.02 sec) 
mysql>insert into abc values('ab ','ab ') 
query ok ,1 row affected(0.00 sec); 
mysql->select concat(v ,'+') ,concat(c ,'+') form abc 
ab + | ab+ 
1rows in set (0.00 sec)


上記からもわかるように、charはなぜか固定長なので処理速度はvarcharよりもはるかに速いですが、ストレージ容量を消費するのでストレージは大きくありませんが、速度要件がある場合は、 char 型を使用できます。それ以外の場合は、varchar 型でインスタンス化できます。

注:

char 文字タイプを使用する場合、コンテンツの後ろにスペースがある場合は、関連する処理を実行する必要があります。そうでない場合、スペースは自動的に削除されます。

推奨事項:

myisam ストレージ エンジンは、可変長データ列の代わりに固定長データ列を使用することを推奨します。
メモリ ストレージ エンジンは現在固定データ行ストレージを使用しているため、char varchar 列を使用するかどうかは関係ありません
innodb ストレージ エンジンは varchar 型の使用を推奨します


以下は他のネチズンからの追加です

char は固定長型、varchar は可変長型です
char(M) 型のデータ列では、各値が M バイトを占めます。長さが M より小さい場合、MySQL はその右側にスペース文字を使用します。 。 (パディングスペース文字は検索操作中に削除されます。) varchar(M) タイプのデータ列では、各値はその長さを記録するのに十分なバイトと 1 バイトのみを占めます (つまり、合計の長さは L+1 バイトです) )。

列の型変換が必要かどうかを決定するためにMySQLで使用されるルール

1. データテーブルでは、各データ列の長さが固定されている場合、各データ行の長さも固定されます。
2. データテーブルに可変長のデータ列がある限り、各データ行の長さは可変になります。
3. あるデータテーブルのデータ行の長さが可変の場合、MySQL はストレージスペースを節約するために、データテーブルの固定長データ列を対応する可変長型に変換します。
例外: 長さが 4 文字未満の char データ列は varchar 型に変換されません

MyISAM テーブルの場合、特に頻繁に変更が必要で断片化しやすい myisam および isam データ テーブルの場合は、Char を使用するようにしてください。 欠点は、ディスク領域を占有することです;

InnoDB テーブルの場合、データ行の内部ストレージ形式が固定長データ行と可変長データ行を区別しないためです (すべてのデータ行はヘッダー部分を共有し、このヘッダー部分には関連するデータ列へのポインターが格納されるため、char 型の使用が varchar 型の使用より必ずしも優れているわけではありません。実際、char 型は通常、varchar 型よりも多くのスペースを占有するため、スペース使用量の削減とディスク I/O の削減の観点からは、varchar 型を使用する方が有益です。

記事 2:
文字は、最も一般的なデータベースの一種ですが、例えばOracleではvarchar2などがあるようです。ただし、MySQL は char と varchar に最も重点を置いているようです。
違いを教えてください。 Char は固定長ですが、varchar は特定の長さに応じて記憶領域を使用します。たとえば、char(255) と varchar(255) の場合、文字列「hello world」を格納する場合、char は 255 のスペースを使用して 11 文字を格納しますが、varchar は 255 を使用しません。最初に長さを計算し、次に長さを計算します。 11 に計算された文字列長情報 (通常は 1 ~ 2 バイト) を加えた値を使用します。これにより、varchar は不確実な長さを格納するときに記憶領域を大幅に削減します。

varchar は char よりもはるかに賢いようですが、char は便利ですか?まだまだ多くの利点があります。

まず、家番号 101、201 などの非常に短い情報を保存します。このような短い情報は char を使用する必要があります。これは、varchar も情報の長さを保存するのにバイトを必要とするためです。ストレージを節約するという本来の目的はありません。利益を得る価値があります。

2 番目、固定長。たとえば、uuid が主キーとして使用される場合は、char の方が適切です。固定長であるため、varchar の動的な長さベースの特性がなくなり、長さの情報も必要になります。

3 つ目は、列が非常に頻繁に変更されることです。 varchar が保存されるたびに、長さを取得するための追加の計算やその他の作業が必要になるため、これが頻繁に変更されると、char では不要な計算に多くのエネルギーが費やされます。


varchar に関するもう 1 つの質問は、varchar はストレージ領域に自動的に適応できるため、varchar(8) と varchar(255) のストレージは同じになるはずです。そのため、テーブルを設計するたびに、より大きな方向に進む必要があります。将来的にお金が足りなくなるというトラブルを避けてください。この考えは正しいでしょうか?答えは否定的です。 mysql はテーブル情報をメモリに置きます (最初のクエリの後、テーブル情報はキャッシュされます。これは Linux では明らかですが、Windows ではそうではないようです。この時点でメモリ アプリケーションが理由はわかりません)。 varchar が大きい場合は、固定長に基づいています。したがって、引き続きオンデマンドで要求する必要があります。

要約: DZ データテーブルを注意深く見てください。固定長フィールドは基本的に依然として char を使用しています。

以上がmysqlのcharとvarcharの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLと他のSQL方言の構文の違いは何ですか?MySQLと他のSQL方言の構文の違いは何ですか?Apr 27, 2025 am 12:26 AM

MySQLdiffersfromotherSQLdialectsinsyntaxforLIMIT,auto-increment,stringcomparison,subqueries,andperformanceanalysis.1)MySQLusesLIMIT,whileSQLServerusesTOPandOracleusesROWNUM.2)MySQL'sAUTO_INCREMENTcontrastswithPostgreSQL'sSERIALandOracle'ssequenceandt

MySQLパーティションは何ですか?MySQLパーティションは何ですか?Apr 27, 2025 am 12:23 AM

MySQLパーティション化により、パフォーマンスが向上し、メンテナンスが簡素化されます。 1)大きなテーブルを特定の基準(日付範囲など)、2)物理的に独立したファイルに物理的に分割する、3)MySQLはクエリするときに関連するパーティションに焦点を合わせることができます。

MySQLで特権をどのように許可して取り消しますか?MySQLで特権をどのように許可して取り消しますか?Apr 27, 2025 am 12:21 AM

mysqlで許可を許可および取り消す方法は? 1。grantallprivilegesondatabase_name.to'username'@'host 'などの許可を付与するために付与ステートメントを使用してください。 2。Revokeallprivilegesondatabase_name.from'username'@'host 'など、Revoke Statementを使用して、許可のタイムリーな通信を確保します。

InnoDBとMyisamストレージエンジンの違いを説明してください。InnoDBとMyisamストレージエンジンの違いを説明してください。Apr 27, 2025 am 12:20 AM

INNODBは、トランザクションサポートと高い並行性を必要とするアプリケーションに適していますが、Myisamはより多くの読み取りとより少ない書き込みを必要とするアプリケーションに適しています。 1.INNODBは、eコマースおよび銀行システムに適したトランザクションおよび銀行レベルのロックをサポートしています。 2. Myisamは、ブログやコンテンツ管理システムに適した、迅速な読み取りとインデックス作成を提供します。

MySQLの結合のさまざまなタイプは何ですか?MySQLの結合のさまざまなタイプは何ですか?Apr 27, 2025 am 12:13 AM

MySQLには4つのメイン結合タイプがあります:innerjoin、leftjoin、rightjoin、fullouterjoin。 1.InnerJoinは、結合条件を満たす2つのテーブルのすべての行を返します。 2.右のテーブルに一致する行がない場合でも、Leftjoinは左のテーブルのすべての行を返します。 3。右joinはleftjoinに反しており、右のテーブルのすべての行を返します。 4.fullouterjoinは、結合条件を満たしている、または満たさない2つのテーブルのすべての行を返します。

MySQLで利用可能なさまざまなストレージエンジンは何ですか?MySQLで利用可能なさまざまなストレージエンジンは何ですか?Apr 26, 2025 am 12:27 AM

mysqloffersvariousstorageEngines、それぞれのfordifferentusecases:1)Innodbisidealforapplicationsingingidcomplianceanceandhighconcurrency、support transactions andforeignkeys.2)myisamisbestforread-havyworkloads、transactionsupptort.3)

MySQLの一般的なセキュリティの脆弱性は何ですか?MySQLの一般的なセキュリティの脆弱性は何ですか?Apr 26, 2025 am 12:27 AM

MySQLの一般的なセキュリティの脆弱性には、SQLインジェクション、弱いパスワード、不適切な許可構成、および非合事ソフトウェアが含まれます。 1。SQL注射は、前処理ステートメントを使用することで防ぐことができます。 2。強力なパスワード戦略を強制的に使用することにより、弱いパスワードを回避できます。 3.不適切な許可構成は、ユーザー許可の定期的なレビューと調整を通じて解決できます。 4.未使用のソフトウェアは、MySQLバージョンを定期的にチェックして更新することでパッチを適用できます。

MySQLでスロークエリをどのように識別できますか?MySQLでスロークエリをどのように識別できますか?Apr 26, 2025 am 12:15 AM

MySQLの遅いクエリを識別することは、遅いクエリログを有効にし、しきい値を設定することで実現できます。 1.スロークエリログを有効にし、しきい値を設定します。 2.スロークエリログファイルを表示および分析し、詳細な分析のためにMySQLDumpSlowやPT-Query-Digestなどのツールを使用します。 3.インデックスの最適化、クエリの書き換え、およびselect*の使用を回避することで、遅いクエリの最適化を実現できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール