RSS

カテゴリー別アーカイブ: MySQL

LOAD DATA INFILE での注意点

MySQL の LOAD DATA INFILE コマンドで CSV ファイルをインポートする場合の注意点ですが、

  • テーブルの文字コードとCSVファイルの文字コードが合っているか?
  • CSVファイルの行の終端がLFか?(WindowsではデフォルトでCRLFになるので注意)
  • 特殊な文字があるとうまくいかない可能性がある。例えば、絵文字 など。
  • 文字コードを実行前に指定しておく。
  • 区切り文字や囲み文字の指定が必要か?

です。

使用例

mysql> SET character_set_database=UTF8;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> load data local infile '/home/user/temp/TABLE1.csv' 
into table TABLE1 fields terminated by ',';
Query OK, 104 rows affected, 10 warnings (0.07 sec)

FIELDS の指定例

FIELDS
    TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY ''
 
コメントする

投稿者: : 2016/11/22 投稿先 MySQL

 

PHP: PDO_MySQL のサンプル

apps.JURA_ZAKKI  というテーブルにデータを挿入してデータを表示する。apps.JURA_ZAKKI の構造は次の通り。

CREATE TABLE `apps`.`JURA_ZAKKI` 
   (`ID` INT NOT NULL AUTO_INCREMENT, 
	`TITLE` VARCHAR(100) NOT NULL, 
	`PATH` VARCHAR(500) NOT NULL, 
	`CATEGORY` VARCHAR(50), 
	`TAG` VARCHAR(50), 
	`ADDDATE` DATE, 
	`KIND` TINYINT DEFAULT 0,
	PRIMARY KEY(ID)
   ) DEFAULT CHARACTER SET UTF8;

INSERT 文でデータを挿入する例。

<?php
$sql = "INSERT INTO JURA_ZAKKI(`TITLE`,`PATH`,`CATEGORY`,`TAG`,`ADDDATE`,`KIND`) VALUES(" .
  "'make ビルドツールの使い方', " .
  "'https://makandat.wordpress.com/2016/08/31/make-%E3%83%93%E3%83%AB%E3%83%89%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/'," .
  " 'C', 'gcc', '2016-09-07', 0)";

$pdo = new PDO(
    'mysql:host=localhost;dbname=apps',
    'root',
    '??????',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

echo $sql . "\n";

if ($pdo->exec($sql) === 0) {
  echo "Error.\n";
  exit();
}

echo "Done. \n";
?>

apps.JURA_ZAKKI テーブルのデータをすべて取得して表示する。

<?php
$sql = "SELECT `ID`, `TITLE`, `CATEGORY`, `TAG`, `KIND` FROM JURA_ZAKKI";

$pdo = new PDO(
    'mysql:host=localhost;dbname=apps',
    'root',
    '??????',
    array(PDO::MYSQL_ATTR_INIT_COMMAND =>; "SET NAMES utf8")
);

echo $sql . "\n";

$q = $pdo->;query($sql);

$rows = $q->fetchAll();

foreach ($rows as $row) {
  printf("%d,%s,%s,%s,%d\n", $row['ID'], $row['TITLE'], $row['CATEGORY'], 
$row['TAG'], $row['KIND']);
}

echo "Done. \n";
?>

ステートメントを使ってデータを挿入するサンプル。

<?php
$sql = "INSERT INTO JURA_ZAKKI(`TITLE`, `PATH`, `CATEGORY`, `TAG`, `ADDDATE`, 
`KIND`) VALUES(?, ?, ?, ?, ?, ?)";

$pdo = new PDO(
    'mysql:host=localhost;dbname=apps',
    'root',
    '???????',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

echo $sql . "\n";

$stm = $pdo->prepare($sql);
$stm->execute(array('PHP: PDO_MySQL のサンプル', 
'https://makandat.wordpress.com/2016/09/07/php-pdo_mysql-%E3%81%A/',
 'PHP', 'MySQL', date("Y-m-d"), 0));

echo "Done. \n";
?>
 
コメントする

投稿者: : 2016/09/07 投稿先 MySQL, PHP

 

タグ:

PHP: PDO_MySQL で文字化けしたとき

PHP で MySQL にアクセスする場合、デフォルトのままだと必ず文字化けが起こる。まず、MySQL のテーブル文字コードが UTF8 になっているか確認する (SHOW CREATE TABLE コマンド)。もし、そうなってなかったら ALTER コマンドで修正する。

さらに、PDO_MySQL のコンストラクタでオプションが指定されているかを確認する。

$pdo = new PDO(
    'mysql:host=localhost;dbname=apps',
    'user',
    '??????',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
 
コメントする

投稿者: : 2016/09/07 投稿先 MySQL, PHP

 

タグ:

MySQL でテーブルを作成するとき、UTF8を指定するには

MySQL でテーブルを作成するとき、UTF8を指定するには CREATE TABLE 文の最後に DEFAULT CHARACTER SET UTF8 を追加します。

(例) CREATE TABLE TABLE1(ID INT, ….) DEFAULT CHARACTER SET UTF8;

 

 

 
コメントする

投稿者: : 2016/08/26 投稿先 MySQL

 

PHP / MySQL文字化け対策

デフォルトの設定ではラテン文字(ASCII)になっているので、文字化けが頻繁に発生します。

次のような環境で文字化けが発生したときの対策例です。

  • PHP 7.0 (mysqli)
  • MySQL 5.7
  • Ubuntu16.04LTS

まず、MySQL のテーブルの文字コード設定が utf8 になっているか確認します。

(コマンド入力例) mysql> show create table table1;

DEFAULT CHAR SET=latin1 になっていたら修正します。

(コマンド入力例) mysql> alter table table1 default charset=utf8;
必ず show create table で変更されたか確認します。カラムによっては latin1 のままになっていることがあります。そのような場合は、そのカラムの文字コードを変更します。

(コマンド入力例)alter table table1 change column1 column1 varchar(100) default charset=utf8;

PHP 側ですが、mysqli::set_charset(‘utf8’) を実行しておきます。これにより、PHPがUTF-8を使っていることを認識します。

 

 
コメントする

投稿者: : 2016/05/26 投稿先 MySQL, PHP

 

MySQL でパスワードの制限を緩くするには

MySQL の新しいバージョン(現在使っているのは 5.7.x です) ではパスワードのポリシーを変更しないと、緩いパスワードを設定できません。

これは、/etc/my.cnf に次の1行を追加して MySQL をリスタートすると解決しました。(CentOS 6.7)

validate_password_policy=LOW

 

 
コメントする

投稿者: : 2016/04/09 投稿先 MySQL

 

MySQL でテーブルの詳細情報を表示するには

show table status コマンドを使うと詳細情報を表示できます。\G を最後に付けると見やすくなります。

show table status\G

このままだと、すべてのテーブル情報が表示されてしまうので、絞りこんで表示するには下の例のようにします。

show table status from db1 like 'p%'\G;

 
コメントする

投稿者: : 2015/01/30 投稿先 MySQL

 

タグ: