MySQL テーブル varchar 最大値(max length)を確認

MySQL テーブル varchar 最大値(max length)を確認

MySQL で テーブルを作成 varchar length size 大きすぎると

下記のメッセージが 出る場合があります。

> create table test_table(s varchar(99999));
ERROR 1074 (42000): Column length too big for column 's' (max = 16383); use BLOB or TEXT instead

エラーを確認すると わたしの環境では 16383 が最大のようでした。

> create table test_table(s varchar(16383));

↑ varchar の長さを 16383に変更した 上記 SQL では テーブル作成が 成功しました

テーブルのカラムを 「s1, s2」2つ同じvarchar 16383にして実行すると↓

> create table test_table(s1 varchar(16383), s2 varchar(16383));
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

上記のエラーが出ました。翻訳してみると

エラー 1118 (42000): 行サイズが大きすぎます。
使用されるテーブル タイプの最大行サイズ (BLOB をカウントしない) は 65535 です。
これには ストレージの オーバーヘッドが含まれます。 マニュアルを確認してください。
いくつかの列を TEXT または BLOB に変更する必要があります

テーブルの最大長が 65535 (16ビット) ということでした

ということは varchar(1) = 4Byte確保しているということですね

> create table test_table(s1 varchar(8191), s2 varchar(8191));

「s1, s2」の2つvarchar最大の場合 8191文字 で テーブル作成 成功しました。

MariaDB 10.9|INSERT 時だけ自動で日付を入れるカラムを追加する方法

MySQL binlog バイナリログ削除

MySQL は binlogという バイナリログを ファイルで 貯めている

わたしの macOS 環境では、 「binlog.000***」というファイルが

/usr/local/var/mysql/ に貯まる。

私の MacBookは、 この バイナリログ が ストレージ を占領してしまった。

ログなので rmコマンドで ログファイル を削除してみたが

下記のように MySQL 起動時に エラーが出た

> mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/mohmac.local.pid).

バイナリログ は消してはいけないらしい。

mysql 接続後、 下記の SQLコマンドで ログ一覧 が表示される。

show master logs;

上記で出てきたリストの 名前を 指定して 下記 SQL コマンドを実行する。

purge master logs to 'binlog.000220';

「binlog.000220」を指定しているが 環境によって値は違うので注意してください。

「binlog.000220」の場合、 220は残るが それより 連番数値の小さいログは削除されます。

purge master logs to

※ バイナリログ の貯まる ファイル場所は 環境で異なるようです。

ユーザー権限から バイナリログを Purge

ユーザー側から バッチ処理などで バイナリログを削除を実行すると下記のエラーが出ます

> show master logs;
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation

userの Super_privが 「N」になっているので 「Y」に変更し再起動すれば

Purge master log コマンド実行できました。

UPDATE mysql.user SET Super_priv='Y'
UPDATE mysql.user SET Super_priv='Y' WHERE user='ユーザー';

MariaDB 10.9|INSERT 時だけ自動で日付を入れるカラムを追加する方法

C# (.NET 8) で DynamoDB に書き込む方法|Windows フォーム + AWS SDK

DynamoDB に書き込む

Visual Studio 2022 + Windows フォームアプリで AWSSDK.DynamoDBv2 を使い、C# (.NET 8) からAWS DynamoDB にデータを書き込む実装例を紹介します。

💡 AWS_ACCESS_KEY_ID などの認証情報をアプリ内でユーザー入力するケースを想定


🔰 前提条件

以下の環境を想定しています:

  • Windows 11 / 10
  • Visual Studio 2022
  • .NET 8(Windows Forms アプリ)
  • AWS IAM ユーザーのアクセスキー保有済み
  • DynamoDB テーブルが作成済み(例:MySampleTable

🛠 NuGet パッケージのインストール

まずは必要な AWS SDK パッケージをインストールしましょう。

1. AWSSDK.DynamoDBv2 の追加

Visual Studio の「ソリューションエクスプローラー」→「NuGet パッケージの管理」→「参照」タブで、以下のパッケージをインストールします:

AWSSDK.DynamoDBv2

またはパッケージマネージャーコンソールで:

Install-Package AWSSDK.DynamoDBv2

🖼 フォームのUI想定

フォームに以下の UI を設置します:

コントロールName備考
TextBoxtxtAccessKeyAWS_ACCESS_KEY_ID
TextBoxtxtSecretKeyAWS_SECRET_ACCESS_KEY
TextBoxtxtSessionTokenAWS_SESSION_TOKEN(省略可)
TextBoxtxtRegionAWS_DEFAULT_REGION
ButtonbtnRun書き込み実行ボタン

※ セキュリティ上、UseSystemPasswordChar = true 推奨

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html


💻 実装コード例

ボタンクリックで DynamoDB に書き込む処理

using Amazon;
using Amazon.Runtime;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

private async void btnRun_Click(object sender, EventArgs e)
{
    var accessKey = txtAccessKey.Text.Trim();
    var secretKey = txtSecretKey.Text.Trim();
    var sessionToken = txtSessionToken.Text.Trim();
    var regionString = txtRegion.Text.Trim();

    if (string.IsNullOrEmpty(accessKey) || string.IsNullOrEmpty(secretKey) || string.IsNullOrEmpty(regionString))
    {
        MessageBox.Show("必要な情報が入力されていません。");
        return;
    }

    RegionEndpoint region;
    try
    {
        region = RegionEndpoint.GetBySystemName(regionString);
    }
    catch
    {
        MessageBox.Show("リージョン名が不正です。例: ap-northeast-1");
        return;
    }

    AWSCredentials credentials = string.IsNullOrEmpty(sessionToken)
        ? new BasicAWSCredentials(accessKey, secretKey)
        : new SessionAWSCredentials(accessKey, secretKey, sessionToken);

    using var client = new AmazonDynamoDBClient(credentials, region);

    var request = new PutItemRequest
    {
        TableName = "MySampleTable",
        Item = new Dictionary
        {
            { "Id", new AttributeValue { S = Guid.NewGuid().ToString() } },
            { "Name", new AttributeValue { S = "テストユーザー" } }
        }
    };

    try
    {
        var response = await client.PutItemAsync(request);
        MessageBox.Show("DynamoDB に書き込み成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show("書き込みエラー: " + ex.Message);
    }
}

AWS_ACCESS_KEY_ID 保存場所

今回の例では環境変数を使わずにアプリ内で直接渡しています
そのため .aws/credentials や OSの環境変数には保存されません。


DynamoDB テーブルが存在しないときは?

PutItemAsync 実行時に「ResourceNotFoundException」が発生します。
テーブルが存在することを事前に確認しましょう(または CreateTableAsync を使って自動作成も可能です)。


🔐 セキュリティに関しての注意

この実装では AWS 認証情報を直接テキストボックスから入力しています。本番利用時には認証情報をハードコードしたりログに出力したりしないよう注意してください。


✅ まとめ

C# (.NET 8) + Windows Forms アプリケーションから AWS DynamoDB にデータを書き込むのは、AWSSDK.DynamoDBv2 と適切なクレデンシャルクラスを使うことで簡単に実現できます。


改行・カンマを含むCSVを正しく読み込む2つの方法

DateTimeを日本時間でISO 8601形式に変換する方法

ファイルから重複行を削除する2つの方法