How to insert dash (-) into database using wpdb and new_to_publish hook?

When we call get_the_title(), then the post title is taken through the wptexturize() function via the the_title filter:

add_filter( 'the_title', 'wptexturize' );

The en-dash and em-dash are replaced with

/* translators: en dash */
$en_dash = _x( '–', 'en dash' );
/* translators: em dash */
$em_dash = _x( '—', 'em dash' );

A simple workaround to keep the en/em dashes when you store it to your custom table, could be:

$site_post_title = str_replace( 
    [ '–', '—' ], 
    [ '–', '—' ],
    get_the_title()
);

or just use the raw $post->post_title if that’s makes more sense for your setup.