2017 © Pedro PelĂĄez
 

library database-encoder

A PHP5 library to fix database encoding

image

mremi/database-encoder

A PHP5 library to fix database encoding

  • Thursday, November 6, 2014
  • by mremi
  • Repository
  • 1 Watchers
  • 2 Stars
  • 16 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

Database encoder library

This library allows you to fix database encoding., (*1)

Who has never seen some accented characters like "Activé" instead of "Activé"?, (*2)

Basic Docs, (*3)

, (*4)

Installation

Only 1 step:, (*5)

Download DatabaseEncoder using composer

Add DatabaseEncoder in your composer.json:, (*6)

{
    "require": {
        "mremi/database-encoder": "dev-master"
    }
}

Now tell composer to download the library by running the command:, (*7)

``` bash $ php composer.phar update mremi/database-encoder, (*8)


Composer will install the library to your project's `vendor/mremi` directory. **Feel free to dump your database before use this library.** This library supports *dry run* mode: look at your logs, you will see SQL queries which will be executed. <a name="encode-tables"></a> ## Encode tables ```php <?php use Mremi\DatabaseEncoder\EncoderHandler; use Mremi\DatabaseEncoder\MySql\MySqlEncoder; use Monolog\Logger; $conn = new \PDO('mysql:host=localhost;dbname=db_name;charset=utf8;', 'db_user', 'db_password'); $logger = new Logger('app'); $encoder = new MySqlEncoder($conn, $logger); $handler = new EncoderHandler($encoder, $logger); $handler->encodeTables(array( 'table1' => array('column1_1', 'column1_2'), 'table2' => array('column2_1', 'column2_2', 'column2_3'), ));

You can also use the command provided by this library, look at the help message:, (*9)

$ bin/encoder encode-tables --help

Some arguments are mandatory:, (*10)

$ bin/encoder encode-tables "mysql:host=localhost;dbname=db_name;charset=utf8;" db_user db_password '{"table1":["column1_1","column1_2"],"table2":["column2_1","column2_2","column2_3"]}'

Some options are available:, (*11)

$ bin/encoder encode-tables "mysql:host=localhost;dbname=db_name;charset=utf8;" db_user db_password '{"table1":["column1_1","column1_2"],"table2":["column2_1","column2_2","column2_3"]}' --options='{"1000":1}' --encoding=utf8 --dry-run

You can increase the log verbosity. The following example allows you to see the SQL queries without execute them:, (*12)

$ bin/encoder encode-tables "mysql:host=localhost;dbname=db_name;charset=utf8;" db_user db_password '{"table1":["column1_1","column1_2"],"table2":["column2_1","column2_2","column2_3"]}' --dry-run -vvv
[notice] Starting encoding (5 queries)...
[debug] Executed in 0 ms: UPDATE `table1` SET `column1_1` = CONVERT(CAST(CONVERT(`column1_1` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table1` SET `column1_2` = CONVERT(CAST(CONVERT(`column1_2` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table2` SET `column2_1` = CONVERT(CAST(CONVERT(`column2_1` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table2` SET `column2_2` = CONVERT(CAST(CONVERT(`column2_2` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table2` SET `column2_3` = CONVERT(CAST(CONVERT(`column2_3` USING latin1) AS BINARY) USING utf8) []
[notice] Done!

, (*13)

Encode database

<?php

use Mremi\DatabaseEncoder\EncoderHandler;
use Mremi\DatabaseEncoder\MySql\MySqlEncoder;

use Monolog\Logger;

$conn    = new \PDO('mysql:host=localhost;dbname=db_name;charset=utf8;', 'db_user', 'db_password');
$logger  = new Logger('app');
$encoder = new MySqlEncoder($conn, $logger);
$handler = new EncoderHandler($encoder, $logger);

$handler->encodeDatabase();

You can also use the command provided by this library, look at the help message:, (*14)

$ bin/encoder encode-database --help

Some arguments are mandatory:, (*15)

$ bin/encoder encode-database "mysql:host=localhost;dbname=db_name;charset=utf8;" db_user db_password

Some options are available:, (*16)

$ bin/encoder encode-database "mysql:host=localhost;dbname=db_name;charset=utf8;" db_user db_password --options='{"1000":1}' --encoding=utf8 --dry-run

You can increase the log verbosity. The following example allows you to see the SQL queries without execute them:, (*17)

$ bin/encoder encode-database "mysql:host=localhost;dbname=db_name;charset=utf8;" db_user db_password --dry-run -vvv
[notice] Retrieving string columns...
[debug] Executed in 0 ms: SELECT DATABASE() []
[debug] Executed in 0 ms: SELECT `TABLE_NAME` AS table_name, `COLUMN_NAME` AS column_name
            FROM `information_schema`.`COLUMNS`
            WHERE
                `TABLE_SCHEMA` = :table_schema
                AND `CHARACTER_SET_NAME` = :character_set_name
            ORDER BY `TABLE_NAME` ["db_name","utf8"]
[notice] Starting encoding (9 queries)...
[debug] Executed in 0 ms: UPDATE `table1` SET `column1_1` = CONVERT(CAST(CONVERT(`column1_1` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table1` SET `column1_2` = CONVERT(CAST(CONVERT(`column1_2` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table2` SET `column2_1` = CONVERT(CAST(CONVERT(`column2_1` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table2` SET `column2_2` = CONVERT(CAST(CONVERT(`column2_2` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table2` SET `column2_3` = CONVERT(CAST(CONVERT(`column2_3` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table3` SET `column3_1` = CONVERT(CAST(CONVERT(`column3_1` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table3` SET `column3_2` = CONVERT(CAST(CONVERT(`column3_2` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table3` SET `column3_3` = CONVERT(CAST(CONVERT(`column3_3` USING latin1) AS BINARY) USING utf8) []
[debug] Executed in 0 ms: UPDATE `table3` SET `column3_4` = CONVERT(CAST(CONVERT(`column3_4` USING latin1) AS BINARY) USING utf8) []
[notice] Done!

, (*18)

Contribution

Any question or feedback? Open an issue and I will try to reply quickly., (*19)

A feature is missing here? Feel free to create a pull request to solve it!, (*20)

I hope this has been useful and has helped you. If so, share it and recommend it! :), (*21)

@mremitsme, (*22)

The Versions

06/11 2014

dev-master

9999999-dev https://github.com/mremi/DatabaseEncoder

A PHP5 library to fix database encoding

  Sources   Download

MIT

The Requires

 

by Rémi Marseille

database encoding

06/11 2014

v0.0.1

0.0.1.0 https://github.com/mremi/DatabaseEncoder

A PHP5 library to fix database encoding

  Sources   Download

MIT

The Requires

 

by Rémi Marseille

database encoding